import { BaseEntity } from "../../type";

export interface InitUserDialogData {
  userName: string;
  email: string;
  nickName: string;
  status: string;
  phoneNumber: string;
  password: string;
  organizationId: string;
  sex: string;
  id: string;
  identityList: string[];
  job: string;
  examine: boolean;
  superAdmin: boolean;
  loginDate?: any;
  loginIp?: any;
  regionDataScope: {
    allow: string[],
    deny: string[],
  };
  organizationDataScope: {
    allow: string[],
    deny: string[],
  };
  organizationSelection: string;
}

// 搜索请求参数
export interface searchData {
  /**
   * 数据创建者
   */
  createBy?: string;
  /**
   * 数据创建时间
   */
  createTime?: string;
  email?: string;
  id?: number;
  isAsc?: string;
  nickName?: string;
  orderByColumn?: string;
  pageNum?: number;
  pageSize?: number;
  params?: string;
  password?: string;
  phoneNumber?: string;
  remark?: string;
  roleId?: number;
  roleIds?: string[];
  /**
   * （0男 1女 2未知）
   */
  sex?: string;
  /**
   * （0正常 1停用）
   */
  status?: string;
  /**
   * （sys_user系统用户）
   */
  type?: string;
  /**
   * 数据更新者
   */
  updateBy?: string;
  /**
   * 数据更新时间
   */
  updateTime?: string;
  userName: string;
}

// 添加请求参数
export interface AddData {
  /**
   * 数据创建者
   */
  createBy?: string;
  /**
   * 数据创建时间
   */
  createTime?: Date;
  /**
   * 用户邮箱
   */
  email?: string;
  /**
   * 用户ID
   */
  id?: number;
  /**
   * 用户昵称
   */
  nickName?: string;
  params?: { [key: string]: { [key: string]: any } };
  /**
   * 密码
   */
  password?: string;
  /**
   * 手机号码
   */
  phoneNumber?: string;
  /**
   * 备注
   */
  remark?: string;
  roleId?: number;
  /**
   * 角色组
   */
  roleIds?: number[];
  /**
   * 用户性别，（0男 1女 2未知）
   */
  sex?: string;
  /**
   * 帐号状态，（0正常 1停用）
   */
  status?: string;
  /**
   * 用户类型，（sys_user系统用户）
   */
  type?: string;
  /**
   * 数据更新者
   */
  updateBy?: string;
  /**
   * 数据更新时间
   */
  updateTime?: Date;
  /**
   * 用户账号
   */
  userName: string;
}

// 返回数据
export interface Response {
  code?: number;
  msg?: string;
  rows?: SysUserVo[];
  total?: number;
}

//////////////////////////////////////////////////

/**
 * 用户信息视图对象
 */
export interface SysUserVo {
  /**
   * 用户头像
   */
  avatar?: string;
  /**
   * 是否属于该角色
   */
  belong?: boolean;
  /**
   * 数据创建者
   */
  createBy?: string;
  /**
   * 数据创建时间
   */
  createTime?: Date;
  /**
   * 删除标志，（0代表存在 2代表删除）
   */
  delFlag?: string;
  /**
   * 用户邮箱
   */
  email?: string;
  /**
   * 是否参与审批
   */
  examine?: boolean;
  /**
   * 用户ID
   */
  id?: string;
  /**
   * 所属身份
   */
  identityList?: SysIdentityVo[];
  /**
   * 岗位
   */
  job?: string;
  /**
   * 最后登录时间
   */
  loginDate?: Date;
  /**
   * 最后登录IP
   */
  loginIp?: string;
  /**
   * 用户昵称
   */
  nickName?: string;
  organizationDataScope?: BaseDataScope;
  /**
   * 所属机构id
   */
  organizationId: string;
  /**
   * 所属组织名称
   */
  organizationName?: string;
  /**
   * 密码
   */
  password?: string;
  /**
   * 手机号
   */
  phoneNumber?: string;
  regionDataScope?: BaseDataScope;
  /**
   * 所属区域
   */
  regionId?: number;
  /**
   * 所属地区
   */
  regionName?: string;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 角色对象
   */
  roles?: SysRoleVo[];
  /**
   * 用户性别
   */
  sex?: string;
  /**
   * 帐号状态，（0正常 1停用 2禁言 3未确定）
   */
  status?: string;
  /**
   * 是否超级管理员
   */
  superAdmin?: boolean;
  /**
   * 数据更新者
   */
  updateBy?: string;
  /**
   * 数据更新时间
   */
  updateTime?: Date;
  /**
   * 用户名
   */
  userName: string;
  /**
   * 用户类型，sys_user系统用户
   */
  userType?: string;
}

// 修改用户
export interface UpdateUserBO {
  /**
   * 数据创建者
   */
  createBy?: string;
  /**
   * 数据创建时间
   */
  createTime?: Date;
  /**
   * 用户邮箱
   */
  email?: string;
  /**
   * 用户ID
   */
  id?: string;
  /**
   * 用户昵称
   */
  nickName?: string;
  params?: { [key: string]: { [key: string]: any } };
  /**
   * 密码
   */
  password?: string;
  /**
   * 手机号码
   */
  phoneNumber?: string;
  /**
   * 备注
   */
  remark?: string;
  roleId?: number;
  /**
   * 角色组
   */
  roleIds?: number[];
  /**
   * 用户性别，（0男 1女 2未知）
   */
  sex?: string;
  /**
   * 帐号状态，（0正常 1停用）
   */
  status?: string;
  /**
   * 用户类型，（sys_user系统用户）
   */
  type?: string;
  /**
   * 数据更新者
   */
  updateBy?: string;
  /**
   * 数据更新时间
   */
  updateTime?: Date;
  /**
   * 用户账号
   */
  userName: string;
}

/**
 * 角色信息视图对象
 */
export interface SysRoleVo {
  /**
   * 创建时间
   */
  createTime?: Date;
  /**
   * 数据范围，（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）
   */
  dataScope?: string;
  /**
   * 角色ID
   */
  id?: number;
  /**
   * 角色权限字符串
   */
  key?: string;
  /**
   * 菜单树选择项是否关联显示
   */
  menuCheckStrictly?: boolean;
  /**
   * 角色名称
   */
  name?: string;
  /**
   * 显示顺序
   */
  orderNum?: number;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 角色状态，（0正常 1停用）
   */
  status?: string;
  /**
   * 是否超级管理员
   */
  superAdmin?: boolean;
  /**
   * 用户是否属于此角色，默认不属于
   */
  userBelong?: boolean;
}

// 列表勾选
export interface checkUser extends BaseEntity {
  /**
   * 主键
   */
  id: string;
  /**
   * 年龄
   */
  age?: number;
  /**
   * 邮箱
   */
  email?: string;
  /**
   * 姓名
   */
  name?: string;
}

/////////////////////////////////////////////////////////
/**
 * 用户详情
 */
export interface SysUserInfoVo {
  roleIds?: string[];
  roles?: SysRoleVo[];
  /**
   * 角色总数
   */
  totalRole?: number;
  user?: SysUserVo;
}

/**
 * 菜单权限视图对象
 */
export interface SysPermissionVo {
  /**
   * 是否缓存
   */
  cached?: boolean;
  /**
   * 子权限
   */
  children?: SysPermissionVo[];
  /**
   * 权限标识编码
   */
  code?: string;
  /**
   * 组件路径
   */
  component?: string;
  componentInfo?: string;
  /**
   * 数据创建者
   */
  createBy?: string;
  /**
   * 数据创建时间
   */
  createTime?: Date;
  /**
   * 是否为外链
   */
  frame?: boolean;
  /**
   * 界面图标
   */
  icon?: string;
  /**
   * 权限ID
   */
  id?: number;
  innerLink?: boolean;
  menuFrame?: boolean;
  /**
   * 后端请求方法
   */
  method?: string;
  /**
   * 权限名称
   */
  name?: string;
  /**
   * 显示顺序
   */
  orderNum?: number;
  /**
   * 父权限ID
   */
  parentId?: number;
  /**
   * 父权限名称
   */
  parentName?: string;
  parentView?: boolean;
  /**
   * 路由地址
   */
  path?: string;
  /**
   * 路由参数
   */
  queryParam?: string;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 请求的模型主键
   */
  requestModelId?: number;
  /**
   * 后端请求路径
   */
  requestPath?: string;
  /**
   * 返回的模型主键
   */
  returnModelId?: number;
  routeName?: string;
  routerPath?: string;
  /**
   * 菜单状态，（0正常 1停用）
   */
  status?: string;
  /**
   * 权限类型，（D目录 M菜单 B按钮 O其他）
   */
  type?: string;
  /**
   * 数据更新者
   */
  updateBy?: string;
  /**
   * 数据更新时间
   */
  updateTime?: Date;
  /**
   * 显示状态
   */
  visible?: boolean;
}

/**
 * 用户身份对象bo，用户身份
 */
export interface SysIdentityVo {
  /**
   * 数据创建者
   */
  createBy?: string;
  /**
   * 数据创建时间
   */
  createTime?: Date;
  /**
   * 删除标志，（0代表存在 2代表删除）
   */
  delFlag?: string;
  /**
   * 身分主键
   */
  id?: number;
  /**
   * 身份key
   */
  key: string;
  /**
   * 身份名称，（运营 ,校长, 专家 ,课程发布人员）
   */
  name: string;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 是否固化，固化是禁止修改删除的
   */
  solid?: boolean;
  /**
   * 帐号状态（0正常 1停用）
   */
  status?: string;
  /**
   * 数据更新者
   */
  updateBy?: string;
  /**
   * 数据更新时间
   */
  updateTime?: Date;
}

/**
 * 机构数据范围
 */
export interface BaseDataScope {
  allow?: string[];
  deny?: string[];
}

///////////////////////////////////////////////////////////
/**
 * 区域树的节点
 */
export interface RegionNode {
  children: RegionNode[];
  id: string;
  label: string;
  parentId: string;
}

////////////////////////////////////////////////////////////
export interface OrganizationNode {
  children: OrganizationNode[];
  createTime: string;
  id: string;
  label: string;
  parentId: string;
  regionMergerName: string;
  status: string;
  type: string;
}

///////////////////////////////////////////////////////////
/**
 * 区域组织混合视图对象
 */
export interface RegionOrganizationMixedVo {
  checkedIds: string[] | null;
  checkedSonIds: string[] | null;
  tree: RegionOrganizationMixedNode[];
}

/**
 * 区域组织混合树节点
 */
export interface RegionOrganizationMixedNode {
  children: RegionOrganizationMixedNode[];
  id: string;
  itemType: number;
  label: string;
  parentId: string;
}
